/**
 * 2009/12/03
 */
package com.googlecode.felicalib.sample;

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;

/**
 * 'felicalib.dll'へアクセスするためのインターフェイス定義.
 * このソースは[システム開発サンプル]から流用したものです。
 * http://yuuhayashi.blogspot.com/search/label/FeliCa
 *
 * [felicalib (felicalib.dll)]
 *         < http://felicalib.tmurakam.org/ >
 * @author o.tanaka
 */
public interface FelicaLib extends Library {
    /**
     * FelicaLib INSTANCE.
     */
    FelicaLib INSTANCE =
        (FelicaLib) Native.loadLibrary("felicalib", FelicaLib.class);

    /**
     * @param felicaHandle Pointer
     */
    void felica_free(Pointer felicaHandle);
    /**
     * @param felicaHandle Pointer
     * @param data byte[8]
     */
    void felica_getidm(Pointer felicaHandle, byte[] data);
    /**
     * @param felicaHandle Pointer
     * @param data byte[8]
     */
    void felica_getpmm(Pointer felicaHandle, byte[] data);
    /**
     * @param pasoriHandle Pointer
     * @param systemCode
     *            システムコード(例えばSuicaは0x0003、ワイルドカードは0xFFFF)
     * @param rfu 0
     * @param time_slot 0
     * @return felicaHandle
     */
    Pointer felica_polling(
            Pointer pasoriHandle,
            int systemCode,
            byte rfu,
            byte time_slot);
    /**
     * @param felicaHandle Pointer
     * @param serviceCode サービスコード
     * @param mode 0
     * @param addr アドレス
     * @param data byte[16]
     * @return errorcode
     */
    int felica_read_without_encryption02(
            Pointer felicaHandle,
            int serviceCode,
            int mode,
            byte addr,
            byte[] data);
    /**
     * @param felicaHandle Pointer
     * @param serviceCode サービスコード
     * @param addr アドレス
     * @param data byte[16]
     * @return errorcode
     */
    int felica_write_without_encryption(
            Pointer felicaHandle,
            int serviceCode,
            byte addr,
            byte[] data);
    /**
     * @param pasoriHandle Pointer
     */
    void pasori_close(Pointer pasoriHandle);
    /**
     * @param pasoriHandle Pointer
     * @return errorcode
     */
    int pasori_init(Pointer pasoriHandle);
    /**
     * @param dummy dummy
     * @return felicaHandle
     */
    Pointer pasori_open(String dummy);
}

